package com.hbnu.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hbnu.system.core.base.CommonPage;
import com.hbnu.system.model.dto.LoginDTO;
import com.hbnu.system.model.dto.UserPasswordDTO;
import com.hbnu.system.model.dto.UserSearchPageDTO;
import com.hbnu.system.model.entity.User;
import com.hbnu.system.model.vo.InfoVO;
import com.hbnu.system.model.vo.UserVO;

import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ${author}
 * @since 2023-05-16
 */
public interface IUserService extends IService<User> {
    /**
     * 登录接口
     *
     * @param loginDTO 用户dto
     * @return token串
     */
    String loginUser(LoginDTO loginDTO);

    /**
     * getInfo
     */
    InfoVO getInfo(String value) throws InstantiationException, IllegalAccessException;

    /**
     * 获取学校数据库数据
     */

    /**
     * 用户新增
     */
    boolean insertUser(User user);

    /**
     * 通过账号查询userList
     */
    List<User> getUserListByAccount(String account);
    /**
     * 通过账号查询user
     */
    User getUserByAccount(String account);

    /**
     * 通过账号模糊查询查询user姓名
     */
//    String getNameByAccount(String account);
    /**
     * 获取相关成果统计
     * 教师用户--获取自身相关
     * 院级管理员--获取院级数据
     * 校级管理员--获取所有数据
     */
    List<List<Integer>> getTotalAchievement(String token);


    /**
     * 获取相关项目统计
     * 教师用户--获取自身相关
     * 院级管理员--获取院级数据
     * 校级管理员--获取所有数据
     */
    List<List<Integer>> getTotalProject(String token);

    /**
     * 获取用户列表
     * @param userSearchPageDTO
     * @return
     */
    CommonPage<UserVO> getUserList(UserSearchPageDTO userSearchPageDTO);

    /**
     * 修改用户
     * @param user
     */
    void updateUser(User user);

    /**
     *  修改密码
     * @param userPasswordDTO
     */
    void updatePassword(UserPasswordDTO userPasswordDTO);

    /**
     * 同步所有用户
     */
    void syncAllUser();
    
    /**
     * 批量加密所有用户密码
     * @return 加密成功的用户数量
     */
    int batchEncryptPassword();

}
